Skip to main content

Data mapping for reporting and what reports are to be generated (MiFID II/MiFIR)

Current trade reporting​

currentTradeReport

Final output:

ZIP inside it XML. File name unknown.

currentTradeReport.docx

When: After each trade/transaction (in payment) or OTC (Transfer event) or when Deuss Back Office needs to update the current order status (for example, “there was a wrong ISIN in the order report, I am sending a cancel correction report”).

Source: Page 3 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017R0590, Article 1 Data standards and formats for transaction reporting

AttributeFrom whereHow / Format Change
Report status ( NEWT or CANC)By default NEWT (the report template for currentTradeReport - payment and OTC), Deuss Back Office can send CANC (currentTradeReport — Cancellation (CANC)) then they have to send NEWT (I am cancelling this report and this is the new report).
Transaction Reference Number (transaction_reference)Payment Service payment.
OTC: query Query($tokenId: BigInt!) { tokenOwners( where: { token: { tokenId_eq: $tokenId } } ) { sentTransfers { txHash from { token { tokenId } } } }}
Trading venue transaction identification codeTransaction Reference Number
Executing entity identification code (DEUSS LEI)Configuration file
Investment Firm covered by Directive 2014/65/EU (Boolean true)Configuration file
Submitting entity identification code (LEI of Deuss)Configuration file probably
Buyer identification code (LEI of the buyer).Payment Service payment.buyer_id → Registry Service (Company.legal_entity_id).
OTC: Transfer Event (receiver) → Indexer (CompanyWallet.entity.entityId) → Registry Service (Company.legal_entity_id)
Country of the branch for the buyer (country_code of the buyer's Broker)Payment Service (buyer_id) → Registry Service (Company.distributor_id) → Partner Service (Broker.country_code).
OTC: Transfer Event (receiver) → Indexer (CompanyWallet.entity.entityId) → Registry Service (Company.distributor_id) → Partner Service (Broker.country_code)
Seller identification code (LEI of the seller)Payment Service payment.seller_id → Registry Service (Company.legal_entity_id).
OTC: Transfer Event (sender) → Indexer (CompanyWallet.owner) → Registry Service (Company.wallet_adress) → Company.legal_entity_id
Transmission of order indicator (the word false)Configuration file
Trading date time (created)Payment Service (payment.created).
OTC (TODO):
Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' – means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC.
Trading capacity (String AOTC)Configuration file
QuantityPayment Service: payment.price × Indexer (MarketDeal.amount).
OTC: TransferEvent.amount (bond quantity)
For Payment Service: 18 digits in total, with max 5 number after the decimal point. For OTC: 18 digits in total, with max 17 numbers after the decimal point.
Quantity currencyPayment Service (payment.currency).
OTC: Field does not exist
PricePayment Service (payment.deal_id) → Indexer MarketDeal.price / MarketDeal.amount.
OTC: String NOAP
Price CurrencyPayment Service (payment.currency).
OTC: Field does not exist
Net amountPayment (payment table):
Net amount = (total_price / quantity × denomination) + (rate / 100 × daysAccrued / 365 × denomination × quantity).
Where:
total_price → Core bond_purchase_payment.amount.
quantity → Core bond_purchase_payment.deal_id → Indexer MarketDeal.amount.
denomination → Core bond_purchase_payment.deal_id → Indexer MarketDeal.marketOffer.token.bond.denomination.
rate → Core bond_purchase_payment.deal_id → Indexer MarketDeal.marketOffer.token.bond.couponRates.
daysAccrued → Core bond_purchase_payment.created − lastCouponDate (iteration over Bond.issueDate + Bond.couponFrequency).
OTC: TODO
18 digits in total, with max 5 numbers after the decimal point. TODO
Venue (MIC of Deuss)Configuration file
Country of the branch membership (Deuss country_code)Configuration file
Instrument identification codePayment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.isin.
OTC: Transfer Event (id) → Indexer TokenOwner.token → Token.tokenContract → Bond.isin
Instrument classificationTODO
Notional currency 1Marketplace: Payment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.currency.
OTC: Transfer Event (id) → Indexer TokenOwner.token → Token.tokenContract → Bond.currency
Maturity dateMarketplace: Payment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.maturityDate.
OTC: Transfer Event (id) → Indexer TokenOwner.token → Token.tokenContract → Bond.maturityDate
RRRR-MM-DD
Execution within firm (the string DEUSS_AUTO_EXEC_001)
Short selling indicator (the string SELL)
OTC post-trade indicatorOnly exists for OTC: TODO
Securities financing transaction indicator (Boolean false)

Reference data reporting of the current approved or traded bonds​

currentApprovedOrTradedBondsReport

Final output:

currentApprovedOrTradedBondsReport.docx

T<MIC of Deuss>_DATINS_FIRDS_T<MIC of Deuss>_<Report number>_<last two years of a year, for example for 2026, would be 26>.zip

inside it:

T<MIC of Deuss>_DATINS_FIRDS_T<MIC of Deuss>_<Report number>_<last two years of a year, for example for 2026, would be 26>.xml

When: At 18:00 CET (UTC + 1 hour) each day, generate a XML for all bonds on the platform where (Indexer: Bond.status == PUBLISHED or Bond.status == ISSUED, and report Bond.status = SUSPENDED or Bond.status = REDEEMED or Bond.status = REPLACED for the day's report once, before you stop reporting it). This includes bonds after 18:00 CET the day before.

Source for report: Page 2 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX%3A32017R0585, Article 1 Content, standards, form and format of reference data_

Source for filename and final file format: Page 50 and 52 in https://www.esma.europa.eu/sites/default/files/library/esma65-11-1193_firds_reference_data_reporting_instructions_v2.1.pdf

AttributeFrom whereHow / Format Change
Report numberSix digits, autoincrement, start 000001, after 999999, reset to 000001
Report dateDate of the creating of the reportYYYY-MM-DD
Instrument identification code (ISIN)Registry Service (bond.isin)
Instrument full nameISIN → Bond Issuance Service (issuance_draft.isin → issuance_draft.name)
Instrument classification (CFI_CODE)TODO
Commodities or emission allowance derivative indicator (Boolean false)
Issuer or operator of the trading venue identifier (Bond issuer LEI)Registry Service (bond.isin → bond.issuer → Company.legal_entity_id)
Trading venue (Deuss MIC)Configuration file
Financial instrument short name (FISN)TODOISO 18774
Request for admission to trading by issuer (Boolean true or false)Indexer Bond.status → true: PUBLISHED, ISSUED, SUSPENDED, REDEEMED, REPLACED. false: UNREGISTERED
Date of approval of the admission to tradingIndexer Bond.history → filter action = BOND_ISSUED → BondHistory.createdAtDate and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Date of request for admission to tradingIndexer Bond.history → filter action = BOND_PUBLISHED → BondHistory.createdAtDate and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Date of admission to trading or date of first tradeDate of first trade → Indexer MarketDeal → filter bond = <ISIN> → MarketDeal.createdAt (oldest entry)Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Termination dateIndexer Bond.history:
Bond.status == SUSPENDED → filter action = BOND_SUSPENDED → BondHistory.createdAt.
Bond.status == REDEEMED → filter action = BOND_REDEEMED → BondHistory.createdAt.
otherwise → field not displayed
Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Notional currency 1Registry Service (bond.isin → bond.currency)CURRENCYCODE_3
Total issued nominal amountRegistry Service (bond.isin → bond.bondCount × bond.bondNominalValue)18 digits in total, with max 5 numbers after the decimal point.
Maturity dateRegistry Service (bond.isin → bond.maturityDate)RRRR-MM-DD
Currency of nominal valueRegistry Service (bond.isin → bond.currency)CURRENCYCODE_3
Nominal value per unit/minimum traded valueRegistry Service (bond.isin → bond.bondNominalValue)18 digits in total, with max 5 numbers after the decimal point.
Fixed rateISIN → Indexer Bond.couponType.
If Bond.couponType = FIXED → Indexer Bond.couponRates.
Otherwise → field does not exist
11 digits in total, with max 10 numbers after the decimal point.
Seniority of the bondTODO

Internal report keeping​

eachTradeInstructionReport

Final output: Probably database entry (there it stays, until it is needed by the regulator or somebody else), there is no fixed/set file format. Might be nice to add the option of a .pdf or other format export.

When:

Seller report entry: Whenever a new MarketOfferHistory record with action = OFFER_REGISTERED is created in the Indexer, generate a report entry for the seller (MarketOffer.owner). This entry is then updated based on events that happen with this MarketOffer. Each of these events affects the same report entry (meaning events are assigned to the same order).

Buyer report entry: Whenever a new MarketDeal is created in the Indexer (buyer = MarketDeal.createdBy), generate a report entry for the buyer. This entry is then updated based on MarketDeal.status changes. Each of these events affects the same report entry (meaning events are assigned to the same order).

Source: Page 3 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017R0580, Article 1 Scope, standards and format of relevant order data

AttributeFrom whereHow / Format Change
Identification of the entity which submitted the order (Deuss LEI)Configuration file
Direct Electronic Access (Boolean false)Configuration file
Client identification code (Company LEI)Seller (MarketOffer.owner) → Indexer (CompanyWallet.owner) → Registry Service (Company.legal_entity_id).
Buyer (MarketDeal.createdBy) → Indexer (CompanyWallet.owner) → Registry Service (Company.legal_entity_id)
Investment decision within firm (leave NULL)
Execution within firm (the word DEUSS_AUTO_EXEC_001)
Non-executing broker (Broker LEI)Seller (MarketOffer.owner) → Indexer (CompanyWallet.owner) → Registry Service (Company.distributor_id) → Partner Service (Broker.legal_entity_id).
Buyer (MarketDeal.createdBy) → Indexer (CompanyWallet.owner) → Registry Service (Company.distributor_id) → Partner Service (Broker.legal_entity_id)
Trading capacity (String AOTC)Configuration file
Liquidity provision activity (Boolean false)Configuration file
Segment MIC code (Deuss MIC)Configuration file
Order book code (String DEUSS-MAIN)
Validity period (String GTSV)
Order restriction (the String "MOFF" – (valid until accepted or is cancelled))
Validity period and timeSeller: Indexer MarketOffer.expiry.
Buyer: Indexer MarketDeal.counterOfferExpiry
Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Financial instrument identification code (ISIN)Seller and Buyer: Indexer MarketOffer.token → TokenContract → Bond.isin
Date of receiptSeller and Buyer: Indexer MarketOffer.createdAtRRRR-MM-DD
Order type classification (String LMTO)
Limit priceSeller: Indexer MarketOffer.unitPrice.
Buyer: Indexer MarketDeal.price / MarketDeal.amount (price per one unit)
18 digits, with max 13 digits after the decimal point
Additional limit Price (leave NULL)
Stop Price (leave NULL)
Pegged limit price (leave NULL)
Trading venue transaction identification codeSeller: Indexer MarketOffer.offerId.
Buyer: Indexer MarketDeal.dealId
Transaction priceSeller and Buyer: Indexer MarketDeal.price
Price currencySeller and Buyer: Indexer MarketOffer.currencyCURRENCYCODE_3
Price notation (String MONE)
Buy-sell indicatorSeller: SELL.
Buyer: BUYI
Order status (String ACTI or INAC)Seller: Indexer MarketOffer.isActive.
true → ACTI.
false → INAC.
Buyer: Indexer MarketDeal.status.
PENDING → ACTI.
other → INAC
Quantity notation (String UNIT)
Initial quantitySeller: Indexer MarketOffer.totalAmount.
Buyer: Indexer MarketDeal.amount
18 digits, max 17 digits being after the decimal point
Remaining quantity including hiddenSeller and Buyer: Indexer MarketOffer.availableAmount
Displayed quantitySeller: Indexer MarketOffer.totalAmount.
Buyer: Indexer MarketDeal.amount
18 digits, max 17 digits being after the decimal point
Quantity currency (leave NULL)
Order identification codeSeller: Indexer MarketOffer.offerId.
Buyer: Indexer MarketDeal.dealId
Minimum Acceptable Quantity (MAQ)Seller and Buyer: Indexer MarketOffer.lot18 digits, with max 17 being after the decimal point
Minimum executable size (MES)Seller and Buyer: Indexer MarketOffer.lot18 digits, with max 17 being after the decimal point
Traded quantitySeller and Buyer: Indexer MarketOffer.soldAmount18 digits, with max 17 being after the decimal point
MES first execution only (Boolean false)
Passive only indicator (Boolean false)
Passive or aggressive indicator (leave NULL)
Self-Execution Prevention (Boolean false)
Strategy Linked Order identification (leave NULL)
Routing Strategy (leave NULL)

For each event:

AttributeFrom whereHow / Format Change
Sequence numberNumber of the event (autoincrement)
Date and TimeMarketDeal → MarketDealHistory.createdAt (timestamp of each status/event change).
MarketOffer → MarketOfferHistory.createdAt (timestamp of each status/event change)
New order, order modification, order cancellation, order rejections, partial or full execution (event status)Seller:
CHMO → offer frozen (TODO).
CAME → MarketOfferHistory.action = OFFER_CANCELLED.
EXPI → MarketOffer.expiry expired + MarketOffer.isActive = false.
PARF → MarketOffer.availableAmount > 0 AND MarketOffer.soldAmount > 0.
FILL → MarketOffer.availableAmount = 0.
Buyer:
CHMO → deal frozen (TODO).
CAME → MarketDeal.status = CANCELLED.
EXPI → MarketDeal.counterOfferExpiry expired.
FILL → MarketDeal.status = SUCCESSFUL
Trading phases (leave NULL)
Indicative auction price (leave NULL)
Indicative auction volume (leave NULL)

Regulatory data for the change in the trading venue​

tradingVenueStatusReport

Final output: Database Entry → then it goes out to CPT via venue data feed

When: Automatic report of the current status of the trading venue

Source: Page 6 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=OJ:L_202501155, Article 5 Data to be transmitted to the CTP for bonds

AttributeFrom whereHow / Format Change
Trading venue (Deuss MIC)TODO
Trading system (String OTHR)TODO
System status start date and time (date and time from which the system status is valid)TODODate and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
Trading system status (ACTV, OTAG, POTG)TODO

Regulatory data for each bond​

eachBondReport

Final output: Database Entry → then it goes out to CPT via venue data feed

When: After bond status changes (after its publication)

Source: Page 6 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=OJ:L_202501155, Article 5 Data to be transmitted to the CTP for bonds

AttributeFrom whereHow / Format Change
Instrument identification code (Issuer bond ISIN code)Registry Service (bond.isin)
Instrument status start date and time (when was the bond published or its information updated)Indexer Bond.status + BondHistory.createdAt (timestamp when status changed)Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC
CurrencyRegistry Service (bond.isin → bond.currency)CURRENCYCODE_3, three letters reflecting ISO 4217
Instrument statusBond.status == SUSPENDED → SUSP.
Bond.status == REDEEMED → RMOV.
Bond.status == PUBLISHED or ISSUED and previous status was SUSPENDED or REDEEMED → ACTV
Trading venue (Deuss MIC)
Trading system (String OTHR)

Every transaction recording for APA or CPT​

eachTradeReportForAPA_OR_CPT

Final output: Database Entry

When: After each trade in Payment Service (table payment) or OTC (Transfer event). Also Deuss Back Office can create one.

Source: Page 5 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0583-20260302, Article 7 Post-trade transparency obligations

AttributeFrom whereHow / Format Change
Trading date and timePayment Service payment.created.
OTC: TODO
Date and time in the following format:
YYYY-MM-DDThh:mm:ss.ddddddZ.
Where:
— 'YYYY' is the year;
— 'MM' is the month;
— 'DD' is the day;
— 'T' — means that the letter 'T' shall be used
— 'hh' is the hour;
— 'mm' is the minute;
— 'ss.dddddd' is the second and its fraction of a second;
— Z is UTC time.
Dates and times shall be reported in UTC.
Instrument identification codePayment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.isin.
OTC: Transfer Event (id) → Indexer TokenOwner.token → Token.tokenContract → Bond.isin
PricePayment Service (payment.deal_id) → Indexer MarketDeal.price / MarketDeal.amount.
OTC: String NOAP
18 digits in total, with max 13 after the decimal point.
Missing PricePayment Service: Null.
OTC: String NOAP
Price currencyPayment Service (payment.currency).
OTC: Field does not exist
Price notationPayment Service: String MONE.
OTC: String NOAP
QuantityPayment Service (payment.deal_id) → Indexer MarketDeal.amount.
OTC: TransferEvent.amount
18 digits in total, with max 17 after the decimal point.
Notional amountPayment Service (payment.deal_id) → Indexer MarketDeal.amount × Bond.denomination.
OTC: TransferEvent.amount × Indexer (Token → TokenContract → Bond.denomination)
18 digits in total, with max 5 after the decimal point.
Notional currencyPayment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.currency.
OTC: Transfer Event (id) → Indexer TokenOwner.token → Token.tokenContract → Bond.currency
Venue of executionPayment Service: Deuss MIC.
OTC: String XOFF
Third-country trading venue of executionNull
Transaction Identification Code (transaction_reference)Payment Service payment.
OTC: query Query($tokenId: BigInt!) { tokenOwners( where: { token: { tokenId_eq: $tokenId } } ) { sentTransfers { txHash from { token { tokenId } } } }}
FlagsOptional, by default Null
Trading SystemPayment Service: String OTHR.
OTC: String XOFF

Reference report for the calculation of transparency​

endOfDayTransparencyReport

Final output: Database Entry

When: At the end of the day, when:

  • Bond.status == PUBLISHED or ISSUED
  • If any of the field in the table down below changes

Source: Page 131 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0583-20260302

AttributeFrom whereHow / Format Change
Instrument identification codeRegistry Service (bond.isin)
Instrument full nameRegistry Service (bond.isin → bond.name)
MiFIR identifierString BOND
Reporting dateRRRR-MM-DD
Trading venueDeuss MIC
MaturityRegistry Service (bond.maturityDate)
Bond typeString CRPB
Issuance dateRegistry Service (bond.issueDate)

End of day instrument report​

endOfDayInstrumentReport

Final output: Database Entry

When: At the end of the day, aggregates information about each instrument on the platform. For the same ISIN, one database entry about this bonds OTC trades and one database entry for its standard trades.

Source: Page 140 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0583-20260302

AttributeFrom whereHow / Format Change
Instrument identification codeRegistry Service (bond.isin)
Execution datePayment Service (payment.created).
OTC: TODO
Execution venuePayment Service: Deuss MIC.
OTC: String XOFF
Suspended instrument flagPayment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.status.
Bond.status == SUSPENDED → TRUE.
otherwise → FALSE.
OTC: TransferEvent.id → Indexer Token → TokenContract → Bond.status.
Bond.status == SUSPENDED → TRUE.
otherwise → FALSE
Total number of transactionsPayment Service: count of payment records where status != CREATED and created = execution date.
OTC: TODO
Total volumePayment Service: sum of (MarketDeal.amount × Bond.denomination) where payment.status != CREATED and payment.created = execution date.
Where:
quantity → payment.deal_id → Indexer MarketDeal.amount.
denomination → Registry Service (bond.isin → bond.bondNominalValue).
OTC: TODO
'Size of transaction' bin range (after counting the bin range by multiplication, it is necessary to find the relevant bin range here: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0583-20260302, page 143, Size of transaction bin)Payment Service: MarketDeal.amount × bond.bondNominalValue.
quantity → payment.deal_id → Indexer MarketDeal.amount.
denomination → Registry Service (bond.isin → bond.bondNominalValue).
OTC: TODO
Total number of transactions executed for that binPayment Service: count of payment records where status != CREATED and created = execution date and trade size (MarketDeal.amount × bond.bondNominalValue) falls within the bin range.
OTC: TODO
Total volume traded for that binPayment Service: sum of (MarketDeal.amount × bond.bondNominalValue) where payment.status != CREATED and payment.created = execution date and trade size falls within the bin range.
OTC: TODO

succesfullTradeCompanyReport

succesfullTradeCompanyReport.docx

Final output: .pdf in the Whitelabel for downloading

When: payment.status changes to DEAL_SETTLED → notify company

Who to notify:

  • Seller → payment.receiver_wallet → Registry Service (Company.walletAddress) → notification
  • Buyer → payment.sender_wallet → Registry Service (Company.walletAddress) → notification

Source: Page 60 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0565-20220802, Article 59 Reporting obligations in respect of execution of orders other than for portfolio management

AttributeFrom whereHow / Format Change
Broker full company name + formPartner Service
Broker addressPartner Service
Broker support phonePartner Service
Broker support emailPartner Service
Broker website URLPartner Service
Broker LEIPartner Service
Broker GEMITODO
Broker AFMTODO
Broker DOYTODO
Full Broker information (Broker full company name + form, with its registered office at Broker address, registered with the General Commercial Registry (GEMI) under number Broker GEMI, Tax Identification Number (AFM): Broker AFM, competent tax office Broker DOY)TODO
Broker LogoTODO
Deuss full company name + formTODO
Deuss addressTODO
Deuss support phoneTODO
Deuss support emailTODO
Deuss website URLTODO
Deuss LEITODO
Deuss GEMITODO
Deuss AFMTODO
Deuss DOYTODO
Full Deuss information (Deuss full company name + form, with its registered office at Deuss address, registered with the General Commercial Registry (GEMI) under number Deuss GEMI, Tax Identification Number (AFM): Deuss AFM, competent tax office Deuss DOY)TODO
Deuss LogoTODO
Company nameBuyer: Core Payment Service (payment.sender_wallet) → Registry Service (Company.walletAdress) → Company.name.
Seller: Core Payment Service (payment.receiver_wallet) → Registry Service (Company.walletAdress) → Company.name
Trading date and timeBuyer and Seller: Core Payment Service (payment.created)Day, month, day, year, hour, minute, second — structured nicely as a single readable date-time string
Order place (Deuss MIC)
Instrument identification code (Issuer bond ISIN)Buyer and Seller: Core Payment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.isin
Issuer bond nameBuyer and Seller: Core Payment Service (payment.deal_id) → Indexer MarketDeal → MarketOffer → Token → TokenContract → Bond.isin → Registry Service (bond.isin → bond.name)
Order direction (Buy or Sell or Subscription)payment table:
payment.receiver_wallet → BUY.
payment.sender_wallet → SELL
Price per bondBuyer and Seller: Core Payment Service (payment.price)
QuantityBuyer and Seller: Core Payment Service (payment.deal_id) → Indexer MarketDeal.amount
PriceBuyer and Seller: Core Payment Service payment.price × Indexer (MarketDeal.amount) × Indexer MarketDeal.amount
Order total fee takenBondPurchasePayment
Fee currencyFrom BondPurchasePayment Currency
Price currencyTODO

fullCompanyPortfolioReport

fullCompanyPortfolioReport.docx

Final output: .pdf in the Whitelabel for downloading

When: Every 3 months

Source: Page 62 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02017R0565-20220802, Article 60 Reporting obligations in respect of portfolio management

AttributeFrom whereHow / Format Change
Broker full company name + formPartner Service
Broker addressPartner Service
Broker support phonePartner Service
Broker support emailPartner Service
Broker website URLPartner Service
Broker LEIPartner Service
Broker GEMITODO
Broker AFMTODO
Broker DOYTODO
Full Broker information (Broker full company name + form, with its registered office at Broker address, registered with the General Commercial Registry (GEMI) under number Broker GEMI, Tax Identification Number (AFM): Broker AFM, competent tax office Broker DOY)TODO
Broker LogoTODO
Deuss support phoneTODO
Deuss support emailTODO
Deuss website URLTODO
Deuss LEITODO
Deuss GEMITODO
Deuss AFMTODO
Deuss DOYTODO
Deuss full company name + formTODO
Deuss addressTODO
Full Deuss information (Deuss full company name + form, with its registered office at Deuss address, registered with the General Commercial Registry (GEMI) under number Deuss GEMI, Tax Identification Number (AFM): Deuss AFM, competent tax office Deuss DOY)TODO
Company nameRegistry Service (Company.name)
List of bond names (owned by the company) + ISIN of these bondsIndexer TokenOwner → filter owner = company.walletAddress → list of bonds → Registry Service bond.isin + bond.name
For each bond, its denomination (at the start of the period and the end of the period)Registry Service (bond.isin → bond.bondNominalValue)
For each bond, its quantity (at the start of the period and its quantity at the end)Indexer TokenOwner → filter owner = company.walletAddress + filter token = bond.
Start of period → TokenOwnerHistory → oldest record within the period.
End of period → TokenOwnerHistory → latest record within the period or current TokenOwner.amount
TODO
For each bond, quantity × denomination (total value for the start and end of the period)For each bond, total value = quantity × denomination.
Start of period → Indexer TokenOwnerHistory (oldest record in period) × Registry Service (bond.bondNominalValue).
End of period → Indexer TokenOwner.amount or TokenOwnerHistory (latest record in period) × Registry Service (bond.bondNominalValue)
TODO
For each bond, its currencyRegistry Service (bond.isin → bond.currency)
Total fees incurredTODO
Fee currencyTODO
Total amount received from coupon paymentsCore Payment Service (receiver_settlement_payment.amount) → filter receiver_wallet = company.walletAdress and created within period → sum of amount
Liens and other encumbrances (Yes/No)TODO
Date of the report (day + month + year)Configured for the report
Time range of the reportFrom when to when is the report

Public venue quality report​

venueQualityReport

Final output: Whatever you want, for example a .pdf. Has to be a machine-readable format.

When: Quarterly, at the latest within three months of the end of each quarter, as follows:

a) by 30 June, information for the period from 1 January to 31 March; b) by 30 September, information for the period from 1 April to 30 June; c) by 31 December, information for the period from 1 July to 30 September; d) by 31 March, information for the period from 1 October to 31 December.

Source: Page 4 in https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32017R0575

The venueQualityReport contains the following information for each trading day:

AttributeFrom whereHow / Format Change
Country of the competent authority (Deuss country)TODO, probably configuration file
Market segment (Deuss MIC)TODO, probably configuration file
Trading day dateTODO, probably configured for the report
OutagesDescription of the outage + their quantity + their average duration
Planned AuctionAlways Null for description, their quantity + their average duration
Unsuccessful Trades (their quantity, their % from the total of trades that day)Core Payment Service:
count of payment where status = UNSUCCESSFUL and created = trading day.
OTC: count of Transfer Events where blockTimestamp = trading day and receiver != null and sender != null (TODO — blockTimestamp not available).
count of all payment where status != CANCELLED and created = trading day + OTC count.
percentage = unsuccessful count / total count × 100
TODO
Number of trade instructionsIndexer:
New instructions → MarketOfferHistory → filter action = OFFER_REGISTERED and createdAt = trading day → count.
Modifications → MarketOfferHistory → filter action = AMOUNTS_UPDATED and createdAt = trading day → count.
Cancellations → MarketOfferHistory → filter action = OFFER_CANCELLED and createdAt = trading day → count.
And for buyer side — MarketDeal status changes: New instructions → PROPOSED.
Cancellations → CANCELLED, DECLINED → count.
OTC: New Transfer Events where blockTimestamp = trading day → count (TODO).
Total = sum of all
TODO
Number of executed tradesCore Payment Service: count of payment where status = DEAL_SETTLED and created = trading day.
OTC: count of Transfer Events where blockTimestamp = trading day and sender != null and receiver != null (TODO — blockTimestamp not available).
Total = sum of both.
If total > 1 → report count.
If total ≤ 1 → NULL
Total value of executed tradesCore Payment Service: sum of (payment.price × Indexer MarketDeal.amount) where status = DEAL_SETTLED and created = trading day.
OTC: sum of (TransferEvent.amount × Bond.denomination) where blockTimestamp = trading day and sender != null and receiver != null (TODO — blockTimestamp not available), denomination → Registry Service (bond.bondNominalValue).
Total = sum of both.
If count of trades > 1 → report total value.
If count of trades ≤ 1 → NULL
Number of trade instructions that were cancelledIndexer:
Seller → MarketOfferHistory → filter action = OFFER_CANCELLED and createdAt = trading day → count.
Buyer → MarketDeal → filter status = CANCELLED or status = DECLINED and createdAt = trading day → count.
Total = sum of both counts
TODO
Median of trade volumeCore Payment Service: median of (MarketDeal.amount × Bond.denomination) where payment.status = DEAL_SETTLED and payment.created = trading day.
quantity → payment.deal_id → Indexer MarketDeal.amount.
denomination → Registry Service (bond.isin → bond.bondNominalValue).
OTC: median of (TransferEvent.amount × Bond.denomination) where blockTimestamp = trading day and sender != null and receiver != null (TODO — blockTimestamp not available).
denomination → Registry Service (bond.isin → bond.bondNominalValue).
Total = median of all individual trade volumes (Marketplace + OTC combined).
If count of trades > 1 → report median.
If count of trades ≤ 1 → NULL
Median of trade instructions volumeIndexer:
Seller → median of MarketOffer.totalAmount × Bond.denomination where MarketOfferHistory.action = OFFER_REGISTERED and createdAt = trading day.
Buyer → median of MarketDeal.amount × Bond.denomination where createdAt = trading day.
OTC: median of (TransferEvent.amount × Bond.denomination) where blockTimestamp = trading day (TODO — blockTimestamp not available).
Total = median of all individual instruction volumes (Seller + Buyer + OTC combined).
If count > 1 → report median.
If count ≤ 1 → NULL
Number of market makersNull, configured

The venueQualityReport also contains each traded bond's information:

AttributeFrom whereHow / Format Change
NameRegistry Service (bond.isin → bond.name)
Identification code (ISIN)Registry Service (bond.isin)
Instrument classification (CFI)TODO
Bond currencyRegistry Service (bond.isin → bond.currency)

The venueQualityReport also contains a section detailing fees for using the platform:

AttributeFrom whereHow / Format Change
TODO

Report for calculating monthly values​

monthlyPrudentialReport

Final output: Database

When: Each month, on the first day

Source: https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:02019R2033-20240109

AttributeFrom whereHow / Format Change
AUMNull
CMHNull
ASANull
NPRNull
CMGNull
TCDNull
CONNull
CVANull
DTFNull
CMVNull
COHDaily value of processed client orders = |purchases| + |sales|.
Marketplace (cash trades):
Purchases → Core Payment Service: sum of payment.total_price where buyer_company_id = customer and status != CANCELLED and created = trading day.
Sales → Core Payment Service: sum of payment.total_price where seller_company_id = customer and status != CANCELLED and created = trading day.
Daily COH value = |sum of purchases| + |sum of sales|.
OTC (cash trades):
Purchases → sum of (TransferEvent.amount × Bond.denomination) where receiver = customer and blockTimestamp = trading day (TODO).
Sales → sum of (TransferEvent.amount × Bond.denomination) where sender = customer and blockTimestamp = trading day (TODO).
Daily COH value = |sum of purchases| + |sum of sales|.
COH calculation:
Take daily values for the last 6 months (for Marketplace and OTC combined).
Exclude the 3 most recent months.
COH = arithmetic mean of daily values for the remaining 3 months.
Calculated on the first trading day of each month.
Exclude: payment.status = CANCELLED — cancelled orders
TODO
K-AUMNull
K-CMHNull
K-ASANull
K-COH0.001 × COH
K-NPRNull
K-CMGNull
K-TCDNull
K-CONNull
K-DTFNull